home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 October: Mac OS SDK / Dev.CD Oct 96 SDK / Dev.CD Oct 96 SDK2.toast / Development Kits (Disc 2) / OpenDoc / OpenDoc Development / Debugging Support / OpenDoc Source Code / Storage / Bento / CMSURefI.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-22  |  5.4 KB  |  175 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        CMSURefI.cpp
  3.  
  4.     Contains:    Implementation for CMStorageUnitRefIterator class.
  5.  
  6.     Owned by:    Vincent Lo
  7.  
  8.     Copyright:    © 1993 - 1995 by Apple Computer, Inc., all rights reserved.
  9.  
  10.     Change History (most recent first):
  11.  
  12.          <6>    10/24/95    jpa        1293441: DM/VL: Bento memory reserve &
  13.                                     fatal container err.
  14.          <5>     10/8/95    TJ        Fixes Recomended by Refball
  15.          <4>      8/3/95    RR        #1257260: Collapse B classes. Remove
  16.                                     somInit methods. Don't call IsInitialized
  17.                                     or SubclassResponsibility
  18.          <3>     5/26/95    VL        1251403: Multithreading naming support.
  19.          <2>     1/26/95    VL        #???: SURef is now a 4-byte array.
  20.          <1>      7/5/94    VL        first checked in
  21.  
  22.     To Do:
  23.     In Progress:
  24.         
  25. */
  26.  
  27. #define CMStorageUnitRefIterator_Class_Source
  28. #define VARIABLE_MACROS
  29. #include <CMSURefI.xih>
  30.  
  31. #ifndef SOM_CMStorageUnit_xh
  32. #include <CMSU.xh>
  33. #endif
  34.  
  35. #ifndef _EXCEPT_
  36. #include "Except.h"
  37. #endif
  38.  
  39. #ifndef __CM_API__
  40. #include "CMAPI.h"
  41. #endif
  42.  
  43. #ifndef _SESSHDR_
  44. #include "SessHdr.h"
  45. #endif
  46.  
  47.  
  48. //==============================================================================
  49. // Function Prototype
  50. //==============================================================================
  51.  
  52. inline void BREAK_AND_THROW(ODError err)
  53. {
  54.     THROW(err);
  55. }
  56.  
  57. //==============================================================================
  58. // CMStorageUnitRefIterator
  59. //==============================================================================
  60.  
  61. //------------------------------------------------------------------------------
  62. // CMStorageUnitRefIterator::~CMStorageUnitRefIterator
  63. //------------------------------------------------------------------------------
  64.  
  65. SOM_Scope void  SOMLINK CMStorageUnitRefIteratorsomUninit(CMStorageUnitRefIterator *somSelf)
  66. {
  67.     CMStorageUnitRefIteratorData *somThis = CMStorageUnitRefIteratorGetData(somSelf);
  68.     CMStorageUnitRefIteratorMethodDebug("CMStorageUnitRefIterator","CMStorageUnitRefIteratorsomUninit");
  69.  
  70.     CMStorageUnitRefIterator_parent_ODStorageUnitRefIterator_somUninit(somSelf);
  71. }
  72.  
  73. //------------------------------------------------------------------------------
  74. // CMStorageUnitRefIterator::InitStorageUnitRefIterator
  75. //------------------------------------------------------------------------------
  76.  
  77. SOM_Scope void  SOMLINK CMStorageUnitRefIteratorInitStorageUnitRefIterator(CMStorageUnitRefIterator *somSelf, Environment *ev,
  78.         ODStorageUnit* storageUnit)
  79. {
  80.     CMStorageUnitRefIteratorData *somThis = CMStorageUnitRefIteratorGetData(somSelf);
  81.     CMStorageUnitRefIteratorMethodDebug("CMStorageUnitRefIterator","CMStorageUnitRefIteratorInitStorageUnitRefIterator");
  82.  
  83.     SOM_TRY
  84.     
  85.     /* Moved from somInit. SOM itself sets fields to zero
  86.     _fValue = kODNULL;
  87.     *((ODULong*) _fReference) = 0; 
  88.     */
  89.     _fNotComplete = kODTrue;
  90.     
  91.     CMStorageUnitRefIterator_parent_ODStorageUnitRefIterator_InitStorageUnitRefIterator(somSelf,ev,storageUnit);
  92.  
  93.     CMValue value = ((CMStorageUnit*) storageUnit)->GetCurValue(ev);
  94.     
  95.     if (value == kODNULL)
  96.         BREAK_AND_THROW(kODErrUnfocusedStorageUnit);
  97.     _fValue = value;
  98.     
  99.     SOM_CATCH_ALL
  100.     SOM_ENDTRY
  101. }
  102.  
  103. //------------------------------------------------------------------------------
  104. // CMStorageUnitRefIterator::First
  105. //------------------------------------------------------------------------------
  106.  
  107. SOM_Scope void  SOMLINK CMStorageUnitRefIteratorFirst(CMStorageUnitRefIterator *somSelf, Environment *ev,
  108.     ODStorageUnitRef ref)
  109. {
  110.     CMStorageUnitRefIteratorData *somThis = CMStorageUnitRefIteratorGetData(somSelf);
  111.     CMStorageUnitRefIteratorMethodDebug("CMStorageUnitRefIterator","CMStorageUnitRefIteratorFirst");
  112.  
  113.     SOM_TRY
  114.  
  115.     CMContainer    container = (_fValue)? CMGetValueContainer(_fValue) : (CMContainer) kODNULL;
  116.     if (container)
  117.         ODSessionMustHaveCMAllocReserve(container);
  118.         
  119.     *((ODULong*) _fReference) = 0; 
  120.     if (CMGetNextReference(_fValue, _fReference) != kODNULL) {    
  121.         ODBlockMove(_fReference, ref, kODStorageUnitRefSize);
  122.         _fNotComplete = kODTrue;
  123.     }
  124.     else
  125.         _fNotComplete = kODFalse;
  126.  
  127.     if (container)
  128.         ODSessionRestoreCMAllocReserve(container);
  129.     
  130.     SOM_CATCH_ALL
  131.     SOM_ENDTRY
  132. }
  133.  
  134. //------------------------------------------------------------------------------
  135. // CMStorageUnitRefIterator::Next
  136. //------------------------------------------------------------------------------
  137.  
  138. SOM_Scope void  SOMLINK CMStorageUnitRefIteratorNext(CMStorageUnitRefIterator *somSelf, Environment *ev,
  139.     ODStorageUnitRef ref)
  140. {
  141.     CMStorageUnitRefIteratorData *somThis = CMStorageUnitRefIteratorGetData(somSelf);
  142.     CMStorageUnitRefIteratorMethodDebug("CMStorageUnitRefIterator","CMStorageUnitRefIteratorNext");
  143.  
  144.     SOM_TRY
  145.  
  146.     CMContainer    container = (_fValue)? CMGetValueContainer(_fValue) : (CMContainer) kODNULL;
  147.     if (container)
  148.         ODSessionMustHaveCMAllocReserve(container);
  149.     
  150.     if (CMGetNextReference(_fValue, _fReference) != kODNULL) {
  151.         ODBlockMove(_fReference, ref, kODStorageUnitRefSize);
  152.         _fNotComplete = kODTrue;
  153.     }
  154.     else
  155.         _fNotComplete = kODFalse;
  156.     
  157.     if (container)
  158.         ODSessionRestoreCMAllocReserve(container);
  159.     
  160.     SOM_CATCH_ALL
  161.     SOM_ENDTRY
  162. }
  163.  
  164. //------------------------------------------------------------------------------
  165. // CMStorageUnitRefIterator::IsNotComplete
  166. //------------------------------------------------------------------------------
  167.  
  168. SOM_Scope ODBoolean  SOMLINK CMStorageUnitRefIteratorIsNotComplete(CMStorageUnitRefIterator *somSelf, Environment *ev)
  169. {
  170.     CMStorageUnitRefIteratorData *somThis = CMStorageUnitRefIteratorGetData(somSelf);
  171.     CMStorageUnitRefIteratorMethodDebug("CMStorageUnitRefIterator","CMStorageUnitRefIteratorIsNotComplete");
  172.  
  173.     return _fNotComplete;
  174. }
  175.